/**
 * let 
 * 
 * 1.不可以重复声明
 * 2.暂时性死区-没有变量提升
 * 3.存在块级作用域
 */

    // // 1不可以重复声明
    // let a = 'A'
    // let a = 'F'

    // console.log(a) //Identifier 'a' has already been declared 标识符重复声明

    // // 2没有变量提升
    // console.log(b) //暂时性死区 Cannot access 'b' before initialization 初始化前无法访问 ''
    // let b = 'B'

    // // 3存在块级作用域
    // {
    //     let c = 'C'
    //     console.log(c) // 'C'
    // }
    // console.log(c) // c is not defined 变量c没有声明



    
/**
 * const 常量
 * 
 * 1.必须再声明时赋予初始值
 * 2.常量值不能修改
 * 3.存在块级作用域
 * 4.#一般使用大写
 * 5.对数组或对象的元素修改，不算对常量的修改，不会报错
 */

    // //  1.必须再声明时赋予初始值
    // const a;
    // console.log(a) //Missing initializer in const declaration 常量声明中缺少初始值设定项

    // // 2.常量值不能修改
    // const b = 'B'
    // b = 'BB'
    // console.log(b) //Assignment to constant variable. 赋值给常数变量。

    // // 3.存在块级作用域
    // {
    //     const c = 'C'
    //     console.log(c) // C
    // }
    // console.log(c) // c is not defined 变量c没有声明

    // // 5.对数组或对象的元素修改，不算对常量的修改，不会报错

    // const d = ['a','b','c'];
    // d.push('d')

    // console.log(d) // ['a','b','c','d']
    // d = 'f'
    // console.log(d) //Assignment to constant variable. 赋值给常数变量。


/**

var 变量提升，可重复声明，可修改。声明时可不赋值

let 可修改，暂时性死区，声明时候可不赋值

const 声明时必须赋值，不可修改（除修改数组、对象中的元素），暂时性死区域

 */